<?php

namespace Modules\System\Services\Mds;

class MDSZip
{
    /**
     * showdoc
     * @catalog 压缩类
     * @title 文件打包下载zip
     * @description https://my.oschina.net/junn/blog/104464
     *
     * @param $datalist 必选 array 文件列表
     * @param $attachmentDir 必选 varchar 根目录
     *
     * @return mixed
     */
    static public function zip($zipName = "mds",$datalist = [],$attachmentDir = "."){

        /**
         * 没有写成class 或者 function ，需要的朋友自己写，就这么几行。。
         */
        $filename = WWW_ROOT."/Modules/system/sys/file/$zipName.zip"; //最终生成的文件名（含路径）

        if(file_exists($filename)){
            //删除原先文件
            unlink($filename);
        }

        if(!file_exists($filename)){
            //重新生成文件
            $zip = new \ZipArchive();//使用本类，linux需开启zlib，windows需取消php_zip.dll前的注释
            if($zip->open($filename,\ZIPARCHIVE::CREATE) !== true){
                exit('无法打开文件，或者文件创建失败');
            }
            foreach($datalist as $val){
                $attachfile = $attachmentDir . $val; //获取原始文件路径
                if(file_exists($attachfile)){
                    $zip->addFile($attachfile,basename($attachfile));//第二个参数是放在压缩包中的文件名称，如果文件可能会有重复，就需要注意一下
                }
            }
            $zip->close();//关闭
        }
        if(!file_exists($filename)){
            exit("无法找到文件"); //即使创建，仍有可能失败。。。。
        }
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header('Content-disposition: attachment; filename=' . basename($filename)); //文件名
        header("Content-Type: application/zip"); //zip格式的
        header("Content-Transfer-Encoding: binary"); //告诉浏览器，这是二进制文件
        header('Content-Length: ' . filesize($filename)); //告诉浏览器，文件大小
        @readfile($filename);

    }

}